iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

Blog 掛掉時在做什麼?有沒有空?可以來重建嗎?系列 第 9

會有什麼後設資料想要設置?有什麼有趣的構想? (2)

  • 分享至 

  • xImage
  •  

有了一些後設資料的想法後,我們下一步就是思考「要如何在系統上建置?」

在我們的系統裡,絕大多數的節點,都會透過 Markdown 的檔案格式記錄下來。這時就可以提及 Markdown 的一個概念——Front Matter。也就是在文件開頭,用雙個 --- 包覆起來的區塊,在這個區塊裡面,我們就可以用 <key>: <value> 的方式建立一個個屬性作為後設資料。所以我們就可以如下的方式紀錄各個資料:

---
NumberTypeMetadata: 123456
StringTypeMetadata: "It is a sentence."
ArrayTypeMetadata: [TagA, "Tag B", tag-c]
DateTypeMetadata: 2022-09-24
---

Main Content

像是昨天提到的 MOC,我們就可以用 array 的方式去記錄這個節點會與哪些主題相關:

```markdown
---
Author: Yuehu
Topics: ["Obsidian", "Zattelkasten", "Bullet Journal]
CteatedAt: 2022-09-04
UpdatedAt: 2022-09-24
---

Main Content

如果是以一般 SSG 的做法,我們就可以用類似以下的程式自動生成 MOC 頁面:

let MOCTitle = node.title
let relativeNodeListByCreatedAt = {}

for all_nodes as node
    let topics = node.frontMatter.Topics
    if topics.contain(MOCTitle)       
        relativeNodeListByCreatedAt[node.title] = node

relativeNodeListByCreatedAt.sortBy(node => node.frontMatters.CreatedAt)

// Show links from relativeNodeListByCreatedAt

或是在 Gatsby.js 中,我們可以透過 GraphQL 去取得這些資料

const result = await graphql(`
query {
  allMdx(sort: { fields: [frontmatter___CreatedAt], order: ASC }) {
	edges {
	  node {
		frontmatter {
		  CreatedAt
		  MOCTitle
		}
	  }
	}
  }
}
`)

但身為一個 Obsidian 重度使用者,其實我也希望能夠透過在 Front Matter 區塊外、也就是主要內文中的 inline fields <Key>::<Value> 取得 Metadata,這可能就要再思考看看如何做到了。


上一篇
會有什麼後設資料想要設置?有什麼有趣的構想? (1)
下一篇
在一則筆記頁面中該顯示哪些資訊?
系列文
Blog 掛掉時在做什麼?有沒有空?可以來重建嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言